# 学员信息在线管理系统
import pymysql


class studb:
    """
    自定义stu表信息操作类
    """

    def __init__(self):
        '''构造方法，打开SQL数据库'''
        self.db = pymysql.connect(host='localhost', user='root', password='', charset='utf8')
        self.cursor = self.db.cursor()
        try:
            self.cursor.execute('use stu')  # 使用数据库
            print("数据库连接成功")

        # 处理异常
        except Exception as err:
            self.db.rollback()
            print('操作失败！,原因是：', err)
            print(type(self.cursor.fetchall()))

    def findAll(self):
        '''信息查询函数'''
        try:
            self.cursor.execute('select * from stuinfo;')
            if self.cursor.rowcount == 0:
                print("========== 没有学员信息可以输出！=============")
            else:
                print("|{0:<5}| {1:<10}| {2:<5}| {3:<10}|".format("id", "name", "age", "classid"))
                print("-" * 40)
                for i in self.cursor.fetchall():
                    print("|{0:<5}| {1:<10}| {2:<5}| {3:<10}|".format(i[0], i[1], i[2], i[3]))
        except Exception as err:
            self.db.rollback()
            print('查询失败！,原因是：', err)

    def insert(self, stu):
        '''信息插入函数'''
        try:
            self.cursor.execute('insert into stuinfo values(null,"{}","{}","{}");'.format(stu['name'], stu['age'], stu['classid']))
            self.db.commit()  # 提交数据库执行
            print("信息插入成功")
        except Exception as err:
            self.db.rollback()
            print('查询失败！,原因是：', err)

    def delete(self, id):
        '''信息删除函数'''
        try:
            self.cursor.execute('delete from stuinfo where id={};'.format(id))
            self.db.commit()  # 提交数据库执行
            print("信息删除成功")
        except Exception as err:
            self.db.rollback()
            print('删除失败！,原因是：', err)

    def __del__(self):
        '''析构方法，关闭数据库'''
        self.cursor.close()
        self.db.close()


# 建立操作类对象
studb = studb()
# 程序主循环
while True:
    # 输出初始界面
    print("=" * 12, "学员管理系统", "=" * 14)
    print("{0:1} {1:13} {2:15}".format(" ", "1. 查看学员信息", "2. 添加学员信息"))
    print("{0:1} {1:13} {2:15}".format(" ", "3. 删除学员信息", "4. 退出系统"))
    print("=" * 40)
    key = input("请输入对应的选择：")
    # 根据键盘值，判断并执行对应的操作
    if key == "1":
        print("=" * 12, "学员信息浏览", "=" * 14)
        studb.findAll()
        input("按回车键继续：")
    elif key == "2":
        print("=" * 12, "学员信息添加", "=" * 14)
        stu = {}
        stu['name'] = input("请输入要添加的姓名：")
        stu['age'] = int(input("请输入要添加的年龄："))
        stu['classid'] = input("请输入要添加的班级号：")
        studb.insert(stu)
        studb.findAll()
        input("按回车键继续：")
    elif key == "3":
        print("=" * 12, "学员信息删除", "=" * 14)
        studb.findAll()
        id = input("请输入你要删除的信息id号：")
        studb.delete(id)
        studb.findAll()
        input("按回车键继续：")
    elif key == "4":
        print("=" * 12, "再见", "=" * 14)
        break
    else:
        print("======== 无效的键盘输入！ ==========")
